import axios from 'axios';
import { ElMessage } from 'element-plus';

// 获取cookie中的token
export function getCookie(name: string): string | undefined {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) {
    return parts.pop()?.split(';').shift();
  }
  return undefined;
}

// 创建axios实例
const request = axios.create({
  baseURL: '/api', // 基础URL，可以根据环境变量进行配置,
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
  },
  withCredentials: true // 允许携带cookie
});

// 请求拦截器
request.interceptors.request.use(
    (config) => {
      // 从cookie中获取token
      const token = getCookie('token');

      // 如果有token，则添加到请求头中
      if (token && config.headers) {
        config.headers.Authorization = `Bearer ${token}`;
      }

      return config;
    },
    (error) => {
      // 请求错误处理
      console.error('请求错误:', error);
      ElMessage.error('请求发送失败');
      return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    (response) => {
      // 直接返回响应数据
      return response.data;
    },
    (error) => {
      // 统一错误处理
      if (error.response) {
        // 服务器返回错误状态码
        switch (error.response.status) {
          case 401:
            // 跳转到登录页
            window.location.href = '/';
            break;
          case 403:
            ElMessage.error(error.response.data?.msg || '拒绝访问');
            break;
          case 404:
            ElMessage.error(error.response.data?.msg || '请求地址出错');
            break;
          case 500:
            ElMessage.error(error.response.data?.msg || '服务器内部错误');
            break;
          default:
            ElMessage.error(`错误:${error.response.data?.msg}`);
        }
      } else if (error.request) {
        // 网络错误
        ElMessage.error('网络错误，请检查网络连接');
      } else {
        // 其他错误
        ElMessage.error('未知错误');
      }

      return Promise.reject(error);
    }
);

export default request;